package com.diaohaiwen.basic.file.controller;

import com.diaohaiwen.common.obj.page.CurrentPageDto;
import com.diaohaiwen.common.obj.page.CurrentPageVo;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import com.diaohaiwen.basic.file.obj.model.Files;
import com.diaohaiwen.basic.file.service.FilesService;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.Serializable;
import java.util.List;

/**
 * 文件配置 控制层。
 *
 * @author 刁海文
 * @since 2023-12-16 22:41:40
 */
@RestController
@RequestMapping("/files")
public class FilesController {

    @Resource
    private FilesService filesService;

    /**
     * 添加文件配置。
     *
     * @param file 文件
     * @return {@code true} 添加成功，{@code false} 添加失败
     */
    @PostMapping
    public boolean save(MultipartFile file) {
        return filesService.upload(file);
    }

    /**
     * 根据主键删除文件配置。
     *
     * @param id 主键
     * @return {@code true} 删除成功，{@code false} 删除失败
     */
    @DeleteMapping("/{id}")
    public boolean remove(@PathVariable Long id) {
        return filesService.removeById(id);
    }

    /**
     * 根据主键更新文件配置。
     *
     * @param files 文件配置
     * @return {@code true} 更新成功，{@code false} 更新失败
     */
    @PutMapping("/{id}")
    public boolean update(@PathVariable Long id, @RequestBody Files files) {
        files.setId(id);
        return filesService.updateById(files);
    }

    /**
     * 查询所有文件配置。
     *
     * @return 所有数据
     */
    @GetMapping("/list")
    public List<Files> list() {
        return filesService.list();
    }

    /**
     * 根据文件配置主键获取详细信息。
     *
     * @param id 文件配置主键
     * @return 文件配置详情
     */
    @GetMapping("/{id}")
    public Files getInfo(@PathVariable Serializable id) {
        return filesService.getById(id);
    }

    /**
     * 分页查询文件配置。
     *
     * @param page 分页对象
     * @return 分页对象
     */
    @GetMapping
    public CurrentPageVo<Files> page(CurrentPageDto page) {
        Page<Files> records = filesService.page(new Page<>(page.getCurrent(), page.getSize()));
        return CurrentPageVo.create(records.getPageNumber(), records.getRecords());
    }

}
